package _go
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSymmetric(root *TreeNode) bool {
	//初始化判断
	if root == nil {return true}
	return  dg(root.Left, root.Right)
}

//判断左右子树是不是对称的
func dg(Left *TreeNode, Right *TreeNode) bool{
	//都为空是对称的
	if Left==nil && Right == nil {
		return true
	}
	//有一个为空是不对称的
	if Left==nil || Right == nil {
		return false
	}
	//如果值相同是对称的  判断右子树的左节点和右子树的右节点 是发对称   在判断左子树的有节点和右子树左节点是否对称
	if Left.Val ==  Right.Val  {
		return  dg(Left.Left, Right.Right)  && dg(Left.Right, Right.Left)
	}else{
		return false
	}
}